import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path';
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import { visualizer } from 'rollup-plugin-visualizer';
// import compression from 'vite-plugin-compression';
import copy from 'rollup-plugin-copy'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {

  // 加载 .env 文件
  const env = loadEnv(mode, process.cwd());
  return {

    plugins: [
      vue(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
        imports: [
          'vue',
          { 'lodash': ['_'] },
          { 'element-plus': ['ElMessage', 'ElMessageBox'] },
          { '@/utils/request/AxiosRequest': ['ajaxRequest'] },
        ],
        dts: './src/types/auto-imports.d.ts'
      }),
      Components({
        deep: true, // 搜索子目录
        dirs: ['src/components'], // 按需加载的文件夹
        dts: 'src/components.d.ts',
        include: [/\.vue$/, /\.vue\?vue/],
        resolvers: [ElementPlusResolver()],
      }),
      // visualizer({
      //   open: true, //在默认用户代理中打开生成的文件
      //   gzipSize: true, // 收集 gzip 大小并将其显示
      //   brotliSize: true, // 收集 brotli 大小并将其显示
      //   filename: "stats.html", // 分析图生成的文件名
      // }),
      // compression({
      //   algorithm: "gzip", // 指定压缩算法为gzip,[ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
      //   ext: ".gz", // 指定压缩后的文件扩展名为.gz
      //   threshold: 10240, // 仅对文件大小大于threshold的文件进行压缩，默认为10KB
      //   deleteOriginFile: true, // 是否删除原始文件，默认为false
      //   filter: /\.(js|css|json|html|ico|svg)(\?.*)?$/i, // 匹配要压缩的文件的正则表达式，默认为匹配.js、.css、.json、.html、.ico和.svg文件
      //   compressionOptions: { level: 9 }, // 指定gzip压缩级别，默认为9（最高级别）
      //   verbose: true, //是否在控制台输出压缩结果
      //   disable: false, //是否禁用插件
      // }),
      copy({
        targets: [
          { src: '../manifest.json', dest: '/dist/' }, //执行拷贝
        ]
      })
    ],
    resolve: {
      // 设置文件目录别名; 根目录地址变更，也需要调整
      alias: {
        '@': resolve(__dirname, './src'),
      },
    },
    rollupOptions: {
      // 包含特定文件模式
      include: ['src/**/*.js', 'src/**/*.ts'],
      // 排除特定文件模式
      exclude: ['node_modules/**']
    },
    build: {
      minify: "terser",
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true
        }
      },
      rollupOptions: {
        input: {
          app2: resolve(__dirname, 'popup.html'),
          app1: resolve(__dirname, 'index.html'),
        },
        output: {
          chunkFileNames: 'js/[name]-[hash].js',
          entryFileNames: 'js/[name]-[hash].js',
          assetFileNames: '[ext]/[name]-[hash].[ext]',
        }
      },

    },
    server: {
      open: true,
      host: '0.0.0.0',
      port: 8088, // 端口
      proxy: {
        [env.VITE_VVHAN_URL]: { // 请求接口中要替换的标识
          target: env.VITE_VVHAN_PROXY_API, // 代理地址
          changeOrigin: true, // 是否允许跨域
          secure: true,
          rewrite: (path) => {  // api标志替换为
            return path.replace(env.VITE_VVHAN_URL, "");
          },
        },
        '/https://www.baidu.com': { // 请求接口中要替换的标识
          target: 'https://www.baidu.com', // 代理地址
          changeOrigin: true, // 是否允许跨域
          // secure: true,
          rewrite: (path) => {  // api标志替换为
            return path.replace('https://www.baidu.com', "");
          },
        }
      }
    },
  }
})
